60806040526001600f553480156200001657600080fd5b506040516200527638038062005276833981016040819052620000399162000456565b828282733cc6cdda760b79bafa08df41ecfa224f810dceb66001848481816002620000658382620005fc565b506003620000748282620005fc565b50506001600055506200008662000280565b50506daaeb6d7670e522a718067333cd4e3b15620001cd5780156200011b57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620000fc57600080fd5b505af115801562000111573d6000803e3d6000fd5b50505050620001cd565b6001600160a01b038216156200016c5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620000e1565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001b357600080fd5b505af1158015620001c8573d6000803e3d6000fd5b505050505b5050805160005b818110156200023357600160106000858481518110620001f857620001f8620006c8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620001d4565b50815162000249906011906020850190620002ff565b506040517fd7aca75208b9be5ffc04c6a01922020ffd62b55e68e502e317f5344960279af890600090a150505050505050620006de565b303b15620002a05760405162dc149f60e41b815260040160405180910390fd5b620002ab33620002ad565b565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562000357579160200282015b828111156200035757825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000320565b506200036592915062000369565b5090565b5b808211156200036557600081556001016200036a565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003c157620003c162000380565b604052919050565b600082601f830112620003db57600080fd5b81516001600160401b03811115620003f757620003f762000380565b60206200040d601f8301601f1916820162000396565b82815285828487010111156200042257600080fd5b60005b838110156200044257858101830151828201840152820162000425565b506000928101909101919091529392505050565b6000806000606084860312156200046c57600080fd5b83516001600160401b03808211156200048457600080fd5b6200049287838801620003c9565b9450602091508186015181811115620004aa57600080fd5b620004b888828901620003c9565b945050604086015181811115620004ce57600080fd5b8601601f81018813620004e057600080fd5b805182811115620004f557620004f562000380565b8060051b92506200050884840162000396565b818152928201840192848101908a8511156200052357600080fd5b928501925b848410156200055d57835192506001600160a01b03831683146200054c5760008081fd5b828252928501929085019062000528565b8096505050505050509250925092565b600181811c908216806200058257607f821691505b602082108103620005a357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005f757600081815260208120601f850160051c81016020861015620005d25750805b601f850160051c820191505b81811015620005f357828155600101620005de565b5050505b505050565b81516001600160401b0381111562000618576200061862000380565b62000630816200062984546200056d565b84620005a9565b602080601f8311600181146200066857600084156200064f5750858301515b600019600386901b1c1916600185901b178555620005f3565b600085815260208120601f198616915b82811015620006995788860151825594840194600190910190840162000678565b5085821015620006b85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b614b8880620006ee6000396000f3fe608060405234801561001057600080fd5b506004361061030a5760003560e01c80636c0360eb1161019c57806395d89b41116100ee578063c87b56dd11610097578063e8a3d48511610071578063e8a3d485146106d0578063e985e9c5146106d8578063f2fde38b1461072157600080fd5b8063c87b56dd146106a2578063cb743ba8146106b5578063d5abeb01146106c857600080fd5b8063ad2f852a116100c8578063ad2f852a14610669578063b88d4fde14610687578063c6ab67a31461069a57600080fd5b806395d89b411461063b578063a22cb46514610643578063a48301141461065657600080fd5b80637a05bc82116101505780638da5cb5b1161012a5780638da5cb5b146105f7578063911f456b14610615578063938e3d7b1461062857600080fd5b80637a05bc82146105a35780637bc2be76146105b6578063840e15d4146105c957600080fd5b806370a082311161018157806370a0823114610580578063715018a61461059357806379ba50971461059b57600080fd5b80636c0360eb146105655780636f8b44b01461056d57600080fd5b806341f4343411610260578063511aa644116102095780636352211e116101e35780636352211e1461052c57806364869dad1461053f57806366251b691461055257600080fd5b8063511aa644146104f357806355f804b31461050657806360c308b61461051957600080fd5b806342966c681161023a57806342966c68146104ba57806344dae42c146104cd57806348a4c101146104e057600080fd5b806341f434341461046457806342260b5d1461047957806342842e0e146104a757600080fd5b806318160ddd116102c257806323b872dd1161029c57806323b872dd146103ff5780632a55205a146104125780633680620d1461045157600080fd5b806318160ddd146103ac5780631b73593c146103e457806323452b9c146103f757600080fd5b8063081812fc116102f3578063081812fc1461034c578063095ea7b314610384578063099b6bfa1461039957600080fd5b806301ffc9a71461030f57806306fdde0314610337575b600080fd5b61032261031d366004613642565b610734565b60405190151581526020015b60405180910390f35b61033f6107dc565b60405161032e91906136cd565b61035f61035a3660046136e0565b61086e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032e565b61039761039236600461371b565b6108d8565b005b6103976103a73660046136e0565b6108f1565b600154600054037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b60405190815260200161032e565b6103976103f2366004613747565b61099b565b610397610a34565b61039761040d3660046137a6565b610a9a565b6104256104203660046137e7565b610ad2565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161032e565b61039761045f366004613809565b610b3b565b61035f6daaeb6d7670e522a718067333cd4e81565b600e547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff166103d6565b6103976104b53660046137a6565b610b9e565b6103976104c83660046136e0565b610bd0565b6103976104db366004613860565b610bde565b6103976104ee366004613896565b610d4f565b6103976105013660046139dc565b610def565b610397610514366004613b12565b610e54565b610397610527366004613b54565b610ee8565b61035f61053a3660046136e0565b610efa565b61039761054d36600461371b565b610f05565b610397610560366004613bc9565b611045565b61033f6110aa565b61039761057b3660046136e0565b6110b9565b6103d661058e366004613bf7565b61113b565b6103976111bd565b6103976111d1565b6103976105b1366004613c14565b611288565b6103976105c4366004613c69565b6112ed565b6105dc6105d7366004613bf7565b611352565b6040805193845260208401929092529082015260600161032e565b60085473ffffffffffffffffffffffffffffffffffffffff1661035f565b610397610623366004613cdc565b6113bf565b610397610636366004613b12565b61215a565b61033f6121a1565b610397610651366004613d18565b6121b0565b6103976106643660046137e7565b6121c4565b600e5473ffffffffffffffffffffffffffffffffffffffff1661035f565b610397610695366004613d46565b612202565b600d546103d6565b61033f6106b03660046136e0565b61223c565b6103976106c3366004613896565b6122d9565b600a546103d6565b61033f612346565b6103226106e6366004613bc9565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b61039761072f366004613bf7565b612355565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1890fe8e0000000000000000000000000000000000000000000000000000000014806107c757507fffffffff0000000000000000000000000000000000000000000000000000000082167f9c15441500000000000000000000000000000000000000000000000000000000145b806107d657506107d68261241d565b92915050565b6060600280546107eb90613e28565b80601f016020809104026020016040519081016040528092919081815260200182805461081790613e28565b80156108645780601f1061083957610100808354040283529160200191610864565b820191906000526020600020905b81548152906001019060200180831161084757829003601f168201915b5050505050905090565b6000610879826124bf565b6108af576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b816108e28161250d565b6108ec8383612612565b505050565b6108f9612727565b6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0115610955576040517fe03264af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80549082905560408051828152602081018490527f7c22004198bf87da0f0dab623c72e66ca1200f4454aa3b9ca30f436275428b7c91015b60405180910390a15050565b6109a3612727565b6109ac826127b7565b6040517f01308e6500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906301308e65906109fe908490600401613f19565b600060405180830381600087803b158015610a1857600080fd5b505af1158015610a2c573d6000803e3d6000fd5b505050505050565b610a3c61281b565b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1565b8273ffffffffffffffffffffffffffffffffffffffff81163314610ac157610ac13361250d565b610acc84848461286c565b50505050565b600e8054600091829161271090610b0f907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1686613f56565b610b199190613f6d565b905473ffffffffffffffffffffffffffffffffffffffff169590945092505050565b610b43612727565b610b4c826127b7565b6040517febb4a55f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063ebb4a55f906109fe908490600401614165565b8273ffffffffffffffffffffffffffffffffffffffff81163314610bc557610bc53361250d565b610acc848484612b2c565b610bdb816001612b47565b50565b610be6612727565b6000610bf56020830183613bf7565b73ffffffffffffffffffffffffffffffffffffffff1603610c42576040517f1cc0baef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612710610c556040830160208401614192565b6bffffffffffffffffffffffff161115610cc157610c796040820160208301614192565b6040517f3cadbafb0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b80600e610cce82826141af565b507ff21fccf4d64d86d532c4e4eb86c007b6ad57a460c27d724188625e755ec6cf6d9050610cff6020830183613bf7565b610d0f6040840160208501614192565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff9091166020830152015b60405180910390a150565b610d57612727565b610d60836127b7565b6040517f8e7d1e4300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528215156024830152841690638e7d1e43906044015b600060405180830381600087803b158015610dd257600080fd5b505af1158015610de6573d6000803e3d6000fd5b50505050505050565b610df7612727565b610e00836127b7565b6040517f4d38017800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634d38017890610db89085908590600401614214565b610e5c612727565b600b610e698284836142ee565b50600154600054037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0115610ee4577f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c600180610ec560005490565b610ecf9190614408565b6040805192835260208301919091520161098f565b5050565b610ef061281b565b610ee48282612d20565b60006107d682612e90565b600f54600114610f71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5245454e5452414e4359000000000000000000000000000000000000000000006044820152606401610cb8565b6002600f55610f7f336127b7565b600a5481610fae6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b610fb8919061441b565b11156110325780610fea6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b610ff4919061441b565b600a546040517fe12d231400000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cb8565b61103c8282612f4f565b50506001600f55565b61104d612727565b611056826127b7565b6040517f12738db800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301528316906312738db8906024016109fe565b60606110b4612f69565b905090565b6110c1612727565b67ffffffffffffffff811115611106576040517fb43e913700000000000000000000000000000000000000000000000000000000815260048101829052602401610cb8565b600a8190556040518181527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c90602001610d44565b600073ffffffffffffffffffffffffffffffffffffffff821661118a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205467ffffffffffffffff1690565b6111c561281b565b6111cf6000612f78565b565b60095473ffffffffffffffffffffffffffffffffffffffff16338114611223576040517fd6eb09ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1610bdb81612f78565b611290612727565b611299836127b7565b6040517fb957d0cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063b957d0cb90610db8908590859060040161442e565b6112f5612727565b6112fe836127b7565b6040517ffd9ab22a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063fd9ab22a90610db89085908590600401614513565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604080822054901c67ffffffffffffffff1690806113b26000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600a549395909450915050565b6113c761281b565b803515611439576040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152813560048201523090636f8b44b090602401600060405180830381600087803b15801561142057600080fd5b505af1158015611434573d6000803e3d6000fd5b505050505b611446602082018261453e565b1590506114b057306355f804b3611460602084018461453e565b6040518363ffffffff1660e01b815260040161147d92919061442e565b600060405180830381600087803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050505b6114bd604082018261453e565b159050611527573063938e3d7b6114d7604084018461453e565b6040518363ffffffff1660e01b81526004016114f492919061442e565b600060405180830381600087803b15801561150e57600080fd5b505af1158015611522573d6000803e3d6000fd5b505050505b61154761153a60e0830160c084016145a3565b65ffffffffffff16151590565b61155a61153a60c0840160a085016145a3565b176001036115cc5730631b73593c6115786080840160608501613bf7565b836080016040518363ffffffff1660e01b81526004016115999291906145be565b600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b505050505b6115da61014082018261453e565b1590506116565730637a05bc826115f76080840160608501613bf7565b61160561014085018561453e565b6040518463ffffffff1660e01b8152600401611623939291906145e8565b600060405180830381600087803b15801561163d57600080fd5b505af1158015611651573d6000803e3d6000fd5b505050505b6000611666610160830183614621565b35146116e05730633680620d6116826080840160608501613bf7565b611690610160850185614621565b6040518363ffffffff1660e01b81526004016116ad92919061465f565b600060405180830381600087803b1580156116c757600080fd5b505af11580156116db573d6000803e3d6000fd5b505050505b60006116f46101a083016101808401613bf7565b73ffffffffffffffffffffffffffffffffffffffff16146117bd57306366251b696117256080840160608501613bf7565b6117376101a085016101808601613bf7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156117a457600080fd5b505af11580156117b8573d6000803e3d6000fd5b505050505b6101a081013515611837576040517f099b6bfa0000000000000000000000000000000000000000000000000000000081526101a08201356004820152309063099b6bfa90602401600060405180830381600087803b15801561181e57600080fd5b505af1158015611832573d6000803e3d6000fd5b505050505b60006118476101c083018361468e565b9050111561194b5760005b6118606101c083018361468e565b905081101561194957306348a4c10161187f6080850160608601613bf7565b61188d6101c086018661468e565b8581811061189d5761189d6146f6565b90506020020160208101906118b29190613bf7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260016044820152606401600060405180830381600087803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b50505050806001019050611852565b505b600061195b6101e083018361468e565b90501115611a5f5760005b6119746101e083018361468e565b9050811015611a5d57306348a4c1016119936080850160608601613bf7565b6119a16101e086018661468e565b858181106119b1576119b16146f6565b90506020020160208101906119c69190613bf7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260006044820152606401600060405180830381600087803b158015611a3a57600080fd5b505af1158015611a4e573d6000803e3d6000fd5b50505050806001019050611966565b505b6000611a6f61020083018361468e565b90501115611b735760005b611a8861020083018361468e565b9050811015611b71573063cb743ba8611aa76080850160608601613bf7565b611ab561020086018661468e565b85818110611ac557611ac56146f6565b9050602002016020810190611ada9190613bf7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260016044820152606401600060405180830381600087803b158015611b4e57600080fd5b505af1158015611b62573d6000803e3d6000fd5b50505050806001019050611a7a565b505b6000611b8361022083018361468e565b90501115611c875760005b611b9c61022083018361468e565b9050811015611c85573063cb743ba8611bbb6080850160608601613bf7565b611bc961022086018661468e565b85818110611bd957611bd96146f6565b9050602002016020810190611bee9190613bf7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260006044820152606401600060405180830381600087803b158015611c6257600080fd5b505af1158015611c76573d6000803e3d6000fd5b50505050806001019050611b8e565b505b6000611c97610260830183614725565b90501115611ddb57611cad61024082018261468e565b9050611cbd610260830183614725565b905014611cf6576040517fb81aa63900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b611d07610260830183614725565b9050811015611dd95730637bc2be76611d266080850160608601613bf7565b611d3461024086018661468e565b85818110611d4457611d446146f6565b9050602002016020810190611d599190613bf7565b611d67610260870187614725565b86818110611d7757611d776146f6565b905061010002016040518463ffffffff1660e01b8152600401611d9c9392919061478d565b600060405180830381600087803b158015611db657600080fd5b505af1158015611dca573d6000803e3d6000fd5b50505050806001019050611cf9565b505b6000611deb61028083018361468e565b90501115611ef65760005b611e0461028083018361468e565b9050811015611ef4576040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915230637bc2be76611e646080860160608701613bf7565b611e7261028087018761468e565b86818110611e8257611e826146f6565b9050602002016020810190611e979190613bf7565b846040518463ffffffff1660e01b8152600401611eb6939291906147c0565b600060405180830381600087803b158015611ed057600080fd5b505af1158015611ee4573d6000803e3d6000fd5b5050505081600101915050611df6565b505b6000611f066102c0830183614883565b9050111561204957611f1c6102a082018261468e565b9050611f2c6102c0830183614883565b905014611f65576040517f74ef6df700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b611f766102c0830183614883565b9050811015612047573063511aa644611f956080850160608601613bf7565b611fa36102a086018661468e565b85818110611fb357611fb36146f6565b9050602002016020810190611fc89190613bf7565b611fd66102c0870187614883565b86818110611fe657611fe66146f6565b905060e002016040518463ffffffff1660e01b815260040161200a939291906148ea565b600060405180830381600087803b15801561202457600080fd5b505af1158015612038573d6000803e3d6000fd5b50505050806001019050611f68565b505b60006120596102e083018361468e565b90501115610bdb5760005b6120726102e083018361468e565b9050811015610ee4576040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091523063511aa6446120ca6080860160608701613bf7565b6120d86102e087018761468e565b868181106120e8576120e86146f6565b90506020020160208101906120fd9190613bf7565b846040518463ffffffff1660e01b815260040161211c939291906149b3565b600060405180830381600087803b15801561213657600080fd5b505af115801561214a573d6000803e3d6000fd5b5050505081600101915050612064565b612162612727565b600c61216f8284836142ee565b507f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac37378828260405161098f92919061442e565b6060600380546107eb90613e28565b816121ba8161250d565b6108ec8383612fef565b6121cc612727565b60408051838152602081018390527f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c910161098f565b8373ffffffffffffffffffffffffffffffffffffffff81163314612229576122293361250d565b61223585858585613086565b5050505050565b6060612247826124bf565b61227d576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612287612f69565b905080516000036122a757604051806020016040528060008152506122d2565b806122b1846130f0565b6040516020016122c2929190614a4f565b6040516020818303038152906040525b9392505050565b6122e1612727565b6122ea836127b7565b6040517f7f2a5cca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528215156024830152841690637f2a5cca90604401610db8565b6060600c80546107eb90613e28565b61235d61281b565b73ffffffffffffffffffffffffffffffffffffffff81166123aa576040517f7448fbae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da90602001610d44565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a0000000000000000000000000000000000000000000000000000000014806124b057507f49064906000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806107d657506107d682613152565b6000816001111580156124d3575060005482105b80156107d65750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b6daaeb6d7670e522a718067333cd4e3b15610bdb576040517fc617113400000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156125a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c49190614a7e565b610bdb576040517fede71dcc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610cb8565b600061261d82610efa565b90503373ffffffffffffffffffffffffffffffffffffffff8216146126a65773ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832033845290915290205460ff166126a6576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b30331461277d61274c60085473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161490565b176000036111cf576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff161515600114610bdb576040517f15e26ff300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff1633146111cf576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061287782612e90565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146128de576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040902080546129178187335b73ffffffffffffffffffffffffffffffffffffffff9081169116811491141790565b6129855773ffffffffffffffffffffffffffffffffffffffff8616600090815260076020908152604080832033845290915290205460ff16612985576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85166129d2576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156129dd57600082555b73ffffffffffffffffffffffffffffffffffffffff86811660009081526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003612acc57600184016000818152600460205260408120549003612aca576000548114612aca5760008181526004602052604090208490555b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610a2c565b6108ec83838360405180602001604052806000815250612202565b6000612b5283612e90565b905080600080612b7086600090815260066020526040902080549091565b915091508415612bf357612b858184336128f5565b612bf35773ffffffffffffffffffffffffffffffffffffffff8316600090815260076020908152604080832033845290915290205460ff16612bf3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015612bfe57600082555b73ffffffffffffffffffffffffffffffffffffffff8316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b177c0300000000000000000000000000000000000000000000000000000000176000878152600460205260408120919091557c020000000000000000000000000000000000000000000000000000000085169003612ccb57600186016000818152600460205260408120549003612cc9576000548114612cc95760008181526004602052604090208590555b505b604051869060009073ffffffffffffffffffffffffffffffffffffffff8616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050600180548101905550505050565b6011548160005b82811015612daf5760006010600060118481548110612d4857612d486146f6565b60009182526020808320919091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101612d27565b5060005b81811015612e4357600160106000878785818110612dd357612dd36146f6565b9050602002016020810190612de89190613bf7565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101612db3565b50612e5060118585613577565b507fbbd3b69c138de4d317d0bc4290282c4e1cbd1e58b579a5b4f114b598c237454d8484604051612e82929190614a9b565b60405180910390a150505050565b60008180600111612f1d57600054811015612f1d57600081815260046020526040812054907c010000000000000000000000000000000000000000000000000000000082169003612f1b575b806000036122d257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600081815260046020526040902054612edc565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ee4828260405180602001604052806000815250613233565b6060600b80546107eb90613e28565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b613091848484610a9a565b73ffffffffffffffffffffffffffffffffffffffff83163b15610acc576130ba848484846132bf565b610acc576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061310a57508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806131e557507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806107d65750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b61323d8383613439565b73ffffffffffffffffffffffffffffffffffffffff83163b156108ec576000548281035b61327460008683806001019450866132bf565b6132aa576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81811061326157816000541461223557600080fd5b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a029061331a903390899088908890600401614af6565b6020604051808303816000875af1925050508015613373575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261337091810190614b35565b60015b6133ea573d8080156133a1576040519150601f19603f3d011682016040523d82523d6000602084013e6133a6565b606091505b5080516000036133e2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490505b949350505050565b6000805490829003613477576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461353357808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001016134fb565b508160000361356e576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b8280548282559060005260206000209081019282156135ef579160200282015b828111156135ef5781547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff843516178255602090920191600190910190613597565b506135fb9291506135ff565b5090565b5b808211156135fb5760008155600101613600565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610bdb57600080fd5b60006020828403121561365457600080fd5b81356122d281613614565b60005b8381101561367a578181015183820152602001613662565b50506000910152565b6000815180845261369b81602086016020860161365f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122d26020830184613683565b6000602082840312156136f257600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610bdb57600080fd5b6000806040838503121561372e57600080fd5b8235613739816136f9565b946020939093013593505050565b60008082840360e081121561375b57600080fd5b8335613766816136f9565b925060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201121561379857600080fd5b506020830190509250929050565b6000806000606084860312156137bb57600080fd5b83356137c6816136f9565b925060208401356137d6816136f9565b929592945050506040919091013590565b600080604083850312156137fa57600080fd5b50508035926020909101359150565b6000806040838503121561381c57600080fd5b8235613827816136f9565b9150602083013567ffffffffffffffff81111561384357600080fd5b83016060818603121561385557600080fd5b809150509250929050565b60006040828403121561387257600080fd5b50919050565b8015158114610bdb57600080fd5b803561389181613878565b919050565b6000806000606084860312156138ab57600080fd5b83356138b6816136f9565b925060208401356138c6816136f9565b915060408401356138d681613878565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715613933576139336138e1565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613980576139806138e1565b604052919050565b803569ffffffffffffffffffff8116811461389157600080fd5b803562ffffff8116811461389157600080fd5b803564ffffffffff8116811461389157600080fd5b803561ffff8116811461389157600080fd5b60008060008385036101208112156139f357600080fd5b84356139fe816136f9565b93506020850135613a0e816136f9565b925060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc082011215613a4057600080fd5b50613a49613910565b613a5560408601613988565b8152613a63606086016139a2565b6020820152613a74608086016139b5565b6040820152613a8560a086016139b5565b6060820152613a9660c086016139b5565b6080820152613aa760e086016139ca565b60a0820152613ab961010086016139ca565b60c0820152809150509250925092565b60008083601f840112613adb57600080fd5b50813567ffffffffffffffff811115613af357600080fd5b602083019150836020828501011115613b0b57600080fd5b9250929050565b60008060208385031215613b2557600080fd5b823567ffffffffffffffff811115613b3c57600080fd5b613b4885828601613ac9565b90969095509350505050565b60008060208385031215613b6757600080fd5b823567ffffffffffffffff80821115613b7f57600080fd5b818501915085601f830112613b9357600080fd5b813581811115613ba257600080fd5b8660208260051b8501011115613bb757600080fd5b60209290920196919550909350505050565b60008060408385031215613bdc57600080fd5b8235613be7816136f9565b91506020830135613855816136f9565b600060208284031215613c0957600080fd5b81356122d2816136f9565b600080600060408486031215613c2957600080fd5b8335613c34816136f9565b9250602084013567ffffffffffffffff811115613c5057600080fd5b613c5c86828701613ac9565b9497909650939450505050565b6000806000838503610140811215613c8057600080fd5b8435613c8b816136f9565b93506020850135613c9b816136f9565b92506101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc082011215613cce57600080fd5b506040840190509250925092565b600060208284031215613cee57600080fd5b813567ffffffffffffffff811115613d0557600080fd5b820161030081850312156122d257600080fd5b60008060408385031215613d2b57600080fd5b8235613d36816136f9565b9150602083013561385581613878565b60008060008060808587031215613d5c57600080fd5b8435613d67816136f9565b9350602085810135613d78816136f9565b935060408601359250606086013567ffffffffffffffff80821115613d9c57600080fd5b818801915088601f830112613db057600080fd5b813581811115613dc257613dc26138e1565b613df2847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613939565b91508082528984828501011115613e0857600080fd5b808484018584013760008482840101525080935050505092959194509250565b600181811c90821680613e3c57607f821691505b602082108103613872577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b803565ffffffffffff8116811461389157600080fd5b69ffffffffffffffffffff613e9f82613988565b168252613eae60208201613e75565b65ffffffffffff808216602085015280613eca60408501613e75565b1660408501525050613ede606082016139ca565b61ffff808216606085015280613ef6608085016139ca565b166080850152505060a0810135613f0c81613878565b80151560a0840152505050565b60c081016107d68284613e8b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176107d6576107d6613f27565b600082613fa3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261402657600080fd5b830160208101925035905067ffffffffffffffff81111561404657600080fd5b803603821315613b0b57600080fd5b600060608301823584526020808401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261409557600080fd5b8401818101903567ffffffffffffffff8111156140b157600080fd5b8060051b8036038313156140c457600080fd5b6060848901529381905260809387018401938290880160005b83811015614135577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a88030182526141168386613ff1565b614121898284613fa8565b9850505091850191908501906001016140dd565b5050505050506141486040840184613ff1565b858303604087015261415b838284613fa8565b9695505050505050565b6020815260006122d26020830184614055565b6bffffffffffffffffffffffff81168114610bdb57600080fd5b6000602082840312156141a457600080fd5b81356122d281614178565b81356141ba816136f9565b73ffffffffffffffffffffffffffffffffffffffff811690507fffffffffffffffffffffffff00000000000000000000000000000000000000008181845416178355602084013561420a81614178565b60a01b1617905550565b73ffffffffffffffffffffffffffffffffffffffff8316815261010081016122d2602083018469ffffffffffffffffffff815116825262ffffff6020820151166020830152604081015164ffffffffff8082166040850152806060840151166060850152806080840151166080850152505060a081015161ffff80821660a08501528060c08401511660c085015250505050565b601f8211156108ec57600081815260208120601f850160051c810160208610156142cf5750805b601f850160051c820191505b81811015610a2c578281556001016142db565b67ffffffffffffffff831115614306576143066138e1565b61431a836143148354613e28565b836142a8565b6000601f84116001811461436c57600085156143365750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612235565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156143bb578685013582556020948501946001909201910161439b565b50868210156143f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b818103818111156107d6576107d6613f27565b808201808211156107d6576107d6613f27565b602081526000613431602083018486613fa8565b803563ffffffff8116811461389157600080fd5b69ffffffffffffffffffff61446a82613988565b16825261ffff61447c602083016139ca565b16602083015261448e60408201613e75565b65ffffffffffff8082166040850152806144aa60608501613e75565b1660608501525050608081013560ff811681146144c657600080fd5b60ff1660808301526144da60a08201614442565b63ffffffff1660a08301526144f160c082016139ca565b61ffff1660c083015261450660e08201613886565b80151560e0840152505050565b73ffffffffffffffffffffffffffffffffffffffff8316815261012081016122d26020830184614456565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261457357600080fd5b83018035915067ffffffffffffffff82111561458e57600080fd5b602001915036819003821315613b0b57600080fd5b6000602082840312156145b557600080fd5b6122d282613e75565b73ffffffffffffffffffffffffffffffffffffffff8316815260e081016122d26020830184613e8b565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000614618604083018486613fa8565b95945050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261465557600080fd5b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006134316040830184614055565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126146c357600080fd5b83018035915067ffffffffffffffff8211156146de57600080fd5b6020019150600581901b3603821315613b0b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261475a57600080fd5b83018035915067ffffffffffffffff82111561477557600080fd5b6020019150600881901b3603821315613b0b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84811682528316602082015261014081016134316040830184614456565b60006101408201905073ffffffffffffffffffffffffffffffffffffffff808616835280851660208401525069ffffffffffffffffffff835116604083015261ffff602084015116606083015265ffffffffffff6040840151166080830152606083015161483860a084018265ffffffffffff169052565b50608083015160ff811660c08401525060a083015163ffffffff811660e08401525060c083015161ffff81166101008401525060e08301518015156101208401525b50949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148b857600080fd5b83018035915067ffffffffffffffff8211156148d357600080fd5b602001915060e081023603821315613b0b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff848116825283166020820152610120810169ffffffffffffffffffff61492484613988565b16604083015262ffffff61493a602085016139a2565b16606083015261494c604084016139b5565b64ffffffffff808216608085015280614967606087016139b5565b1660a08501528061497a608087016139b5565b1660c0850152505061498e60a084016139ca565b61ffff1660e08301526149a360c084016139ca565b61ffff811661010084015261487a565b73ffffffffffffffffffffffffffffffffffffffff8481168252831660208201526101208101613431604083018469ffffffffffffffffffff815116825262ffffff6020820151166020830152604081015164ffffffffff8082166040850152806060840151166060850152806080840151166080850152505060a081015161ffff80821660a08501528060c08401511660c085015250505050565b60008351614a6181846020880161365f565b835190830190614a7581836020880161365f565b01949350505050565b600060208284031215614a9057600080fd5b81516122d281613878565b60208082528181018390526000908460408401835b86811015614aeb578235614ac3816136f9565b73ffffffffffffffffffffffffffffffffffffffff1682529183019190830190600101614ab0565b509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261415b6080830184613683565b600060208284031215614b4757600080fd5b81516122d28161361456fea2646970667358221220112bfce59a4c4be58bb8117a711e1486752355cc29b194c2cf25f7aa9e3c833964736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001154726962757465546f546865576f726c6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045454545700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000005ea00ac477b1030ce78506496e8c2de24bf5